using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Export Mosaic Dataset Paths</para>
    /// <para>Creates a table of the file path for each item in a mosaic dataset. You can specify whether the table contains all the file paths or just the ones that are broken.</para>
    /// <para>为镶嵌数据集中的每个项目创建文件路径表。您可以指定表是包含所有文件路径还是仅包含损坏的文件路径。</para>
    /// </summary>    
    [DisplayName("Export Mosaic Dataset Paths")]
    public class ExportMosaicDatasetPaths : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportMosaicDatasetPaths()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset containing the file paths to export.</para>
        /// <para>包含要导出的文件路径的镶嵌数据集。</para>
        /// </param>
        /// <param name="_out_table">
        /// <para>Output Table</para>
        /// <para><xdoc>
        ///   <para>The table to create. The table can be a geodatabase table or a .dbf file.</para>
        ///   <para>The SourceOID field in the output table is derived from the OID of the row in the original mosaic dataset table.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要创建的表。该表可以是地理数据库表或 .dbf 文件。</para>
        ///   <para>输出表中的 SourceOID 字段派生自原始镶嵌数据集表中行的 OID。</para>
        /// </xdoc></para>
        /// </param>
        public ExportMosaicDatasetPaths(object _in_mosaic_dataset, object _out_table)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._out_table = _out_table;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Export Mosaic Dataset Paths";

        public override string CallName => "management.ExportMosaicDatasetPaths";

        public override List<string> AcceptEnvironments => ["configKeyword", "extent", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _out_table, _where_clause, _export_mode.GetGPValue(), _types_of_paths];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset containing the file paths to export.</para>
        /// <para>包含要导出的文件路径的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Output Table</para>
        /// <para><xdoc>
        ///   <para>The table to create. The table can be a geodatabase table or a .dbf file.</para>
        ///   <para>The SourceOID field in the output table is derived from the OID of the row in the original mosaic dataset table.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要创建的表。该表可以是地理数据库表或 .dbf 文件。</para>
        ///   <para>输出表中的 SourceOID 字段派生自原始镶嵌数据集表中行的 OID。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_table { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL expression to select specific rasters for export.</para>
        /// <para>用于选择要导出的特定栅格的 SQL 表达式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Export Mode</para>
        /// <para><xdoc>
        ///   <para>Populate the table with either all of the paths, or only the broken paths.</para>
        ///   <bulletList>
        ///     <bullet_item>All paths—Export all paths to the table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Broken paths only—Export only broken paths to the table.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>使用所有路径或仅损坏的路径填充表。</para>
        ///   <bulletList>
        ///     <bullet_item>所有路径 （All paths） - 将所有路径导出到表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>仅断开的路径 - 仅将断开的路径导出到表中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Export Mode")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _export_mode_value _export_mode { get; set; } = _export_mode_value._ALL;

        public enum _export_mode_value
        {
            /// <summary>
            /// <para>All paths</para>
            /// <para>All paths—Export all paths to the table. This is the default.</para>
            /// <para>所有路径 （All paths） - 将所有路径导出到表中。这是默认设置。</para>
            /// </summary>
            [Description("All paths")]
            [GPEnumValue("ALL")]
            _ALL,

            /// <summary>
            /// <para>Broken paths only</para>
            /// <para>Broken paths only—Export only broken paths to the table.</para>
            /// <para>仅断开的路径 - 仅将断开的路径导出到表中。</para>
            /// </summary>
            [Description("Broken paths only")]
            [GPEnumValue("BROKEN")]
            _BROKEN,

        }

        /// <summary>
        /// <para>Types of paths to export</para>
        /// <para><xdoc>
        ///   <para>Choose to export file paths from only the source raster, only the cache, or both. The default is to export all path types.</para>
        ///   <bulletList>
        ///     <bullet_item>Raster—Export file paths from rasters.</bullet_item><para/>
        ///     <bullet_item>Item cache—Export file paths from item cache.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择仅从源栅格和/或缓存导出文件路径。默认设置是导出所有路径类型。</para>
        ///   <bulletList>
        ///     <bullet_item>栅格 - 从栅格中导出文件路径。</bullet_item><para/>
        ///     <bullet_item>项目缓存 - 从项目缓存中导出文件路径。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Types of paths to export")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _types_of_paths { get; set; } = null;


        public ExportMosaicDatasetPaths SetEnv(object configKeyword = null, object extent = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(configKeyword: configKeyword, extent: extent, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}